home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-09-28 | 22.4 KB | 1,030 lines |
-
- ;---------------------------------------------------------------------
- ; ** ** ** *** *** **** ** *** ** ****
- ; **** *** *** ** ** ** ** ** **** ** ** ** **
- ; ** ** ** * ** ** ** *** ***** ** ** *** ** **
- ; ****** ** ** ** ** ** ** ** ****** ** ** **
- ; ** ** ** ** ** ** * ** ** ** ** ** * ** ** ** **
- ; ** ** ** ** *** *** ***** ** ** *** ** ****
- ;---------------------------------------------------------------------
- ; Serial / Parallel / Printer extension source code
- ; By François Lionet
- ; AMOS, AMOSPro, AMOS Compiler (c) Europress Software 1990-1992
- ; To be used with AMOSPro V1.0 and over
- ;---------------------------------------------------------------------
- ; This file is public domain
- ;---------------------------------------------------------------------
- ;
- ; Please refer to the _Music.s file for more informations...
- ;
- ;---------------------------------------------------------------------
-
- Version MACRO
- dc.b "1.0"
- ENDM
-
-
- * AMIGA's includes
- INCDIR ":Includes/I/"
- INCLUDE "Exec/Types.I"
- INCLUDE "Exec/Exec.I"
- INCLUDE "Devices/Serial.I"
- INCLUDE "Devices/PrtBase.I"
- INCLUDE "Devices/Printer.I"
- INCLUDE "Devices/PrtGfx.I"
- INCLUDE "Devices/Parallel.I"
-
- *************** AMOS includes
- ExtNb equ 6-1
-
- Include "|AMOS_Includes.s"
-
- Dlea MACRO
- move.l ExtAdr+ExtNb*16(a5),\2
- add.w #\1-DT,\2
- ENDM
- Dload MACRO
- move.l ExtAdr+ExtNb*16(a5),\1
- ENDM
-
- * Number of serial channels allowed
- NSerial equ 4
-
- ******************************************************************
- * Header
- Start dc.l C_Tk-C_Off
- dc.l C_Lib-C_Tk
- dc.l C_Title-C_Lib
- dc.l C_End-C_Title
- dc.w 0
-
- ******************************************************************
- * Offsets to library
- C_Off dc.w (L1-L0)/2,(L2-L1)/2,(L3-L2)/2,(L4-L3)/2
- dc.w (L5-L4)/2,(L6-L5)/2,(L7-L6)/2,(L8-L7)/2
- dc.w (L9-L8)/2,(L10-L9)/2,(L11-L10)/2,(L12-L11)/2
- dc.w (L13-L12)/2,(L14-L13)/2,(L15-L14)/2,(L16-L15)/2
- dc.w (L17-L16)/2,(L18-L17)/2,(L19-L18)/2,(L20-L19)/2
- dc.w (L21-L20)/2,(L22-L21)/2,(L23-L22)/2,(L24-L23)/2
- dc.w (L25-L24)/2,(L26-L25)/2,(L27-L26)/2,(L28-L27)/2
- dc.w (L29-L28)/2,(L30-L29)/2,(L31-L30)/2,(L32-L31)/2
- dc.w (L33-L32)/2,(L34-L33)/2,(L35-L34)/2,(L36-L35)/2
- dc.w (L37-L36)/2,(L38-L37)/2,(L39-L38)/2,(L40-L39)/2
- dc.w (L41-L40)/2,(L42-L41)/2,(L43-L42)/2,(L44-L43)/2
- dc.w (L45-L44)/2,(L46-L45)/2,(L47-L46)/2,(L48-L47)/2
- dc.w (L49-L48)/2,(L50-L49)/2,(L51-L50)/2,(L52-L51)/2
- dc.w (L53-L52)/2,(L54-L53)/2,(L55-L54)/2,(L56-L55)/2
- dc.w (L57-L56)/2,(L58-L57)/2,(L59-L58)/2,(L60-L59)/2
- dc.w (L61-L60)/2,(L62-L61)/2,(L63-L62)/2,(L64-L63)/2
- dc.w (L65-L64)/2,(L66-L65)/2,(L67-L66)/2,(L68-L67)/2
- dc.w (L69-L68)/2,(L70-L69)/2,(L71-L70)/2,(L72-L71)/2
-
- ******************************************************************
- * TOKEN TABLE
- C_Tk dc.w 1,0
- dc.b $80,-1
- dc.w L_SerOp2,-1
- dc.b "!serial ope","n"+$80,"I0,0",-2
- dc.w L_SerOp5,-1
- dc.b $80,"I0,0,0,0,0",-1
- dc.w L_SerClo0,-1
- dc.b "!serial clos","e"+$80,"I",-2
- dc.w L_SerClo1,-1
- dc.b $80,"I0",-1
- dc.w L_SerSp,-1
- dc.b "serial spee","d"+$80,"I0,0",-1
- dc.w -1,L_SerChk
- dc.b "serial chec","k"+$80,"00",-1
- dc.w L_SerSend,-1
- dc.b "serial sen","d"+$80,"I0,2",-1
- dc.w L_SerSp,-1
- dc.b "serial spee","d"+$80,"I0,0",-1
- dc.w L_SerBit,-1
- dc.b "serial bit","s"+$80,"I0,0,0",-1
- dc.w L_SerX,-1
- dc.b "serial ","x"+$80,"I0,0",-1
- dc.w L_SerBuf,-1
- dc.b "serial bu","f"+$80,"I0,0",-1
- dc.w L_SerPar,-1
- dc.b "serial parit","y"+$80,"I0,0",-1
- dc.w -1,L_SerGet
- dc.b "serial ge","t"+$80,"00",-1
- dc.w -1,L_SerInp
- dc.b "serial input","$"+$80,"20",-1
- dc.w L_SerFast,-1
- dc.b "serial fas","t"+$80,"I0",-1
- dc.w L_SerSlow,-1
- dc.b "serial slo","w"+$80,"I0",-1
- dc.w -1,L_SerE
- dc.b "serial erro","r"+$80,"00",-1
- dc.w L_SerOut,-1
- dc.b "serial ou","t"+$80,"I0,0,0",-1
- dc.w -1,L_SerStatus
- dc.b "serial statu","s"+$80,"00",-1
- dc.w -1,L_SerBase
- dc.b "serial bas","e"+$80,"00",-1
- dc.w L_SerAbort,-1
- dc.b "serial abor","t"+$80,"I0",-1
-
- ; Printer commands
- ; ~~~~~~~~~~~~~~~~
- dc.w L_PrtOpen,-1
- dc.b "printer ope","n"+$80,"I",-1
- dc.w L_PrtClose,-1
- dc.b "printer clos","e"+$80,"I",-1
- dc.w L_PrtSend,-1
- dc.b "printer sen","d"+$80,"I2",-1
- dc.w L_PrtRaw,-1
- dc.b "printer ou","t"+$80,"I0,0",-1
- dc.w L_PrtDump1,-1
- dc.b "!printer dum","p"+$80,"I0",-2
- dc.w L_PrtDump2,-1
- dc.b $80,"I0,0t0,0",-2
- dc.w L_PrtDump3,-1
- dc.b $80,"I0,0t0,0,0,0,0",-1
- dc.w L_PrtAbort,-1
- dc.b "printer abor","t"+$80,"I",-1
- dc.w -1,L_PrtCheck
- dc.b "printer chec","k"+$80,"0",-1
- dc.w -1,L_PrtOnLine
- dc.b "printer onlin","e"+$80,"0",-1
- dc.w -1,L_PrtBase
- dc.b "printer bas","e"+$80,"0",-1
- dc.w -1,L_PrtError
- dc.b "printer erro","r"+$80,"0",-1
- ; Parallel commands
- ; ~~~~~~~~~~~~~~~~~
- dc.w L_ParOpen,-1
- dc.b "parallel ope","n"+$80,"I",-1
- dc.w L_ParClose,-1
- dc.b "parallel clos","e"+$80,"I",-1
- dc.w L_ParSend,-1
- dc.b "parallel sen","d"+$80,"I2",-1
- dc.w L_ParRaw,-1
- dc.b "parallel ou","t"+$80,"I0,0",-1
- dc.w L_ParAbort,-1
- dc.b "parallel abor","t"+$80,"I",-1
- dc.w -1,L_ParCheck
- dc.b "parallel chec","k"+$80,"0",-1
- dc.w -1,L_ParStatus
- dc.b "parallel statu","s"+$80,"0",-1
- dc.w -1,L_ParBase
- dc.b "parallel bas","e"+$80,"0",-1
- dc.w -1,L_ParError
- dc.b "parallel erro","r"+$80,"0",-1
- dc.w -1,L_ParInput1
- dc.b "!parallel input","$"+$80,"20",-2
- dc.w -1,L_ParInput2
- dc.b $80,"20,0",-2
-
- dc.w 0
- C_Lib
-
- ******************************************************************
- * COLD START
- L0 movem.l a3-a6,-(sp)
- lea DT(pc),a3
- move.l a3,ExtAdr+ExtNb*16(a5)
- lea SerDef(pc),a0
- move.l a0,ExtAdr+ExtNb*16+4(a5)
- lea SerEnd(pc),a0
- move.l a0,ExtAdr+ExtNb*16+8(a5)
- movem.l (sp)+,a3-a6
- moveq #ExtNb,d0 * NO ERRORS
- rts
-
- ******* SCREEN RESET
- SerDef
- ******* QUIT
- SerEnd Rbsr L_SCloseA
- Dlea PrinterIO,a2
- Rjsr L_Dev.Close
- Dlea ParallelIO,a2
- Rjsr L_Dev.Close
- rts
-
- *************** Data zone
- DT
- SerialIO ds.l 3*NSerial Serial IO Port
- PrinterIO ds.l 3 Printer IO Port
- ParallelIO ds.l 3 Parallel IO Port
- BufIn dc.l 0
- Prt_Query dc.l 0 Espace pour informations
-
- ; Screen Dump
- ; ~~~~~~~~~~~
- width: dc.w 0
- height: dc.w 0
- viewModes dc.w 0
- depth: dc.w 0
- screen dc.l 0
- vPort dc.l 0
- rPort dc.l 0
- colourmap dc.l 0
- oldCtable dc.l 0
- special dc.w $84
- srcX dc.w 0
- srcY dc.w 0
- pwidth dc.w 0
- pheight dc.w 0
- temp1 dc.w 0
- temp2 dc.w 0
- destCols dc.l 0
- destRows dc.l 0
- ScreenBase: dc.l 0
-
- ; Nom des devices
- ; ~~~~~~~~~~~~~~~
- SerName dc.b "serial.device",0
- PrtName dc.b "printer.device",0
- ParName dc.b "parallel.device",0
- even
-
- L1
- L2
-
- ***********************************************************
- * OPEN SERIAL DEVICE
-
- ******* Seropen logicnumber,physicnumber[,shared,xdisabled,7wires]
- L_SerOp2 equ 3
- L3 clr.l -(a3)
- clr.l -(a3)
- clr.l -(a3)
- Rbra L_SerOp5
- L_SerOp5 equ 4
- L4 move.l 16(a3),d0
- Rbsr L_GetSerial
- ; Opening parameters
- move.w #IO_SERFLAGS,d5
- swap d5
- clr.w d5
- tst.l (a3)+
- beq.s SerOpA
- bset #SERB_7WIRE,d5
- SerOpA bset #SERB_XDISABLED,d5
- tst.l (a3)+
- beq.s SerOpB
- bclr #SERB_XDISABLED,d5
- SerOpB tst.l (a3)+
- beq.s SerOpC
- bset #SERB_SHARED,d5
- SerOpC Dlea SerName,a0
- moveq #IOEXTSER_SIZE,d0
- move.l (a3),d1
- moveq #0,d2
- move.w #145,d3
- moveq #16,d4
- Rjsr L_Dev.Open
- move.l (a3)+,d0
- addq.l #4,a3
- beq.s .PaSet
- * If NOT user-serial (#0),
- * default settings for French MINITEL: 1200/7/1 Stop/EVEN parity
- move.l (a2),a1
- move.l #1200,IO_BAUD(a1)
- move.b #7,IO_READLEN(a1)
- move.b #7,IO_WRITELEN(a1)
- move.b #1,IO_STOPBITS(a1)
- bset #SERB_XDISABLED,IO_SERFLAGS(a1)
- bset #SERB_PARTY_ON,IO_SERFLAGS(a1)
- bclr #SERB_PARTY_ODD,IO_SERFLAGS(a1)
- bclr #SEXTB_MSPON,IO_EXTFLAGS+3(a1)
- bclr #SEXTB_MARK,IO_EXTFLAGS+3(a1)
- * Appelle le device au moins une fois! BUG!
- .PaSet move.l (a2),a1
- Rbra L_Stpar
-
- ***********************************************************
- * Serclose [N]
- L_SerClo1 equ 5
- L5 move.l (a3)+,d0
- Rbsr L_GetSerial
- Rjmp L_Dev.Close
- ;-----> Close ALL channels
- L_SerClo0 equ 6
- L_SCloseA equ 6
- L6 Dlea SerialIO,a2
- moveq #NSerial-1,d2
- SCloA1 Rjsr L_Dev.Close
- lea 12(a2),a2
- dbra d2,SCloA1
- rts
- L7
-
- ***********************************************************
- * Serial Send ser,A$
- L_SerSend equ 8
- L8 move.l (a3)+,d2
- move.l (a3)+,d0
- Rbsr L_GetSerA1
- move.l d2,a0
- moveq #0,d0
- move.w (a0)+,d0
- Rbeq L_IFonc
- move.l d0,IO_LENGTH(a1)
- move.l a0,IO_DATA(a1)
- moveq #CMD_WRITE,d0
- Rjmp L_Dev.SendIO
- ***********************************************************
- * Serial Out ser,address,length
- L_SerOut equ 9
- L9 move.l (a3)+,d2
- Rbmi L_IFonc
- Rbeq L_IFonc
- move.l (a3)+,d1
- move.l (a3)+,d0
- Rbsr L_GetSerA1
- move.l d1,IO_DATA(a1)
- move.l d2,IO_LENGTH(a1)
- moveq #CMD_WRITE,d0
- Rjmp L_Dev.SendIO
- ***********************************************************
- * =Serial Get(ser)
- L_SerGet equ 10
- L10 move.l (a3)+,d0
- Rbsr L_GetSerA1
- move.w #SDCMD_QUERY,d0
- Rjsr L_Dev.DoIO
- moveq #-1,d3
- move.l IO_ACTUAL(a1),d0
- beq.s SerINo
- Dlea BufIn,a0
- move.l a0,IO_DATA(a1)
- move.l #1,IO_LENGTH(a1)
- moveq #CMD_READ,d0
- Rjsr L_Dev.DoIO
- moveq #0,d3
- Dlea BufIn,a0
- move.b (a0),d3
- SerINo moveq #0,d2
- rts
- ***********************************************************
- * =Serial Input$(Ser)
- L_SerInp equ 11
- L11 move.l (a3)+,d0
- Rbsr L_GetSerA1
- moveq #SDCMD_QUERY,d0
- Rjsr L_Dev.DoIO
- move.l IO_ACTUAL(a1),d4
- beq.s SInpNo
- cmp.l #65530,d4
- Rbcc L_IFonc
- * Ask for string space...
- movem.l a1/a2,-(sp)
- move.l d4,d3
- and.w #$FFFE,d3 * Only EVEN!
- addq.w #2,d3
- Rjsr L_Demande
- lea 2(a1,d3.w),a1
- move.l a1,HiChaine(a5)
- * Send to device...
- movem.l (sp)+,a1/a2
- move.l a0,d3
- move.w d4,(a0)+
- move.l a0,IO_DATA(a1)
- move.l d4,IO_LENGTH(a1)
- moveq #CMD_READ,d0
- Rjsr L_Dev.DoIO
- moveq #2,d2
- rts
- * Nothing to return
- SInpNo move.l ChVide(a5),d3 * Empty string
- moveq #2,d2
- rts
-
- ***********************************************************
- * Serial Speed ser,baud
- L_SerSp equ 12
- L12 move.l (a3)+,d1
- move.l (a3)+,d0
- Rbsr L_GetSerA1
- move.l d1,IO_BAUD(a1)
- Rbra L_Stpar
- L_Stpar equ 13
- L13 moveq #SDCMD_SETPARAMS,d0
- Rjmp L_Dev.DoIO
- ***********************************************************
- * Serial Bit ser,number,stop
- L_SerBit equ 14
- L14 move.l (a3)+,d2
- move.l (a3)+,d1
- move.l (a3)+,d0
- Rbsr L_GetSerA1
- move.b d1,IO_READLEN(a1)
- move.b d1,IO_WRITELEN(a1)
- move.b d2,IO_STOPBITS(a1)
- Rbra L_Stpar
- ***********************************************************
- * Serial Parity ser,on/off/odd/even/mspon
- L_SerPar equ 15
- L15 move.l (a3)+,d1
- move.l (a3)+,d0
- Rbsr L_GetSerA1
- bclr #SERB_PARTY_ON,IO_SERFLAGS(a1)
- bclr #SERB_PARTY_ODD,IO_SERFLAGS(a1)
- bclr #SEXTB_MSPON,IO_EXTFLAGS+3(a1)
- bclr #SEXTB_MARK,IO_EXTFLAGS+3(a1)
- ; -1-> NO PARITY
- tst.w d1
- bmi.s .parX
- ; 0--> EVEN
- bne.s .par1
- bset #SERB_PARTY_ON,IO_SERFLAGS(a1)
- bra.s .parX
- ; 1--> ODD
- .par1 cmp.w #1,d1
- bne.s .par2
- bset #SERB_PARTY_ON,IO_SERFLAGS(a1)
- bset #SERB_PARTY_ODD,IO_SERFLAGS(a1)
- bra.s .parX
- ; 2--> SPACE
- .par2 cmp.w #2,d1
- bne.s .par3
- bset #SEXTB_MSPON,IO_EXTFLAGS+3(a1)
- bra.s .parX
- ; 3--> MARK
- .par3 cmp.w #3,d1
- bne.s .parX
- bset #SEXTB_MSPON,IO_EXTFLAGS+3(a1)
- bset #SEXTB_MARK,IO_EXTFLAGS+3(a1)
- ; Envoie
- .parX Rbra L_Stpar
- **********************************************************
- * Serial X ser,value
- L_SerX equ 16
- L16 move.l (a3)+,d1
- move.l (a3)+,d0
- Rbsr L_GetSerA1
- bset #SERB_XDISABLED,IO_SERFLAGS(a1)
- cmp.l #-1,d1
- Rbeq L_Stpar
- bclr #SERB_XDISABLED,IO_SERFLAGS(a1)
- move.l d1,IO_CTLCHAR(a1)
- Rbra L_Stpar
- **********************************************************
- * Serial Buffer ser,length
- L_SerBuf equ 17
- L17 move.l (a3)+,d1
- move.l (a3)+,d0
- Rbsr L_GetSerA1
- move.l d1,IO_RBUFLEN(a1)
- Rbra L_Stpar
- **********************************************************
- * Serial Fast ser
- L_SerFast equ 18
- L18 move.l (a3)+,d0
- Rbsr L_GetSerA1
- bclr #SERB_PARTY_ON,IO_SERFLAGS(a1)
- bclr #SEXTB_MSPON,IO_EXTFLAGS+3(a1)
- bset #SERB_XDISABLED,IO_SERFLAGS(a1)
- move.b #8,IO_READLEN(a1)
- move.b #8,IO_WRITELEN(a1)
- bset #SERB_RAD_BOOGIE,IO_SERFLAGS(a1)
- Rbra L_Stpar
- **********************************************************
- * Serial Slow Ser
- L_SerSlow equ 19
- L19 move.l (a3)+,d0
- Rbsr L_GetSerA1
- bclr #SERB_RAD_BOOGIE,IO_SERFLAGS(a1)
- Rbra L_Stpar
- **********************************************************
- * =Serial Check(N)
- L_SerChk equ 20
- L20 move.l (a3)+,d0
- Rbsr L_GetSerial
- Rjsr L_Dev.CheckIO
- move.l d0,d3
- beq.s SerChk1
- moveq #-1,d3
- SerChk1 moveq #0,d2
- rts
- **********************************************************
- * =Serial Error(n)
- L_SerE equ 21
- L21 move.l (a3)+,d0
- Rbsr L_GetSerA1
- moveq #0,d3
- move.b IO_ERROR(a1),d3
- moveq #0,d2
- rts
-
- **********************************************************
- * =Serial Status(n)
- L_SerStatus equ 22
- L22 move.l (a3)+,d0
- Rbsr L_GetSerA1
- moveq #SDCMD_QUERY,d0
- Rjsr L_Dev.DoIO
- moveq #0,d3
- move.l (a2),a1
- move.w IO_STATUS(a1),d3
- moveq #0,d2
- rts
-
- **********************************************************
- * =SERIAL BASE
- L_SerBase equ 23
- L23 move.l (a3)+,d0
- Rbsr L_GetSerA1
- move.l a1,d3
- moveq #0,d2
- rts
-
- ;-----> IO #D0 to A1/a2
- L_GetSerA1 equ 24
- L24 Rbsr L_GetSerial
- Rjmp L_Dev.GetIO
- ;-----> Find IO address > D0
- L_GetSerial equ 25
- L25 cmp.l #NSerial,d0
- Rbcc L_IFonc
- mulu #12,d0
- Dlea SerialIO,a2
- add.w d0,a2
- rts
-
- *********************************************************************
- * SERIAL ABORT channel
- L_SerAbort equ 26
- L26 move.l (a3)+,d0
- Rbsr L_GetSerial
- Rjmp L_Dev.AbortIO
-
- L27
- L28
- *********************************************************************
- * ERRORS
- L_IFonc equ 29
- L29 moveq #23,d0 * Illegal function call
- Rjmp L_Error
- L30
- L31
- L32
-
- **********************************************************
- * =PRINTER BASE
- L_PrtBase equ 33
- L33 Dlea PrinterIO,a2
- Rjsr L_Dev.GetIO
- move.l a1,d3
- moveq #0,d2
- rts
- **********************************************************
- * =PRINTER CHECK
- L_PrtCheck equ 34
- L34 Dlea PrinterIO,a2
- Rjsr L_Dev.CheckIO
- move.l d0,d3
- beq.s PrtChk1
- moveq #-1,d3
- PrtChk1 moveq #0,d2
- rts
-
- *********************************************************************
- * PRINTER OPEN
- L_PrtOpen equ 35
- L35 Dlea PrtName,a0
- Dlea PrinterIO,a2
- moveq #64,d0
- moveq #0,d1
- moveq #0,d2
- move.w #161,d3 Premier message erreurs
- moveq #7,d4 7 messages
- moveq #0,d5
- Rjmp L_Dev.Open
-
- *********************************************************************
- * PRINTER CLOSE
- L_PrtClose equ 36
- L36 Dlea PrinterIO,a2
- Rjmp L_Dev.Close
-
- *********************************************************************
- * =PRINTER ERROR
- L_PrtError equ 37
- L37 Dlea PrinterIO,a2
- Rjsr L_Dev.GetIO
- moveq #0,d3
- move.b IO_ERROR(a1),d3
- moveq #0,d2
- rts
-
- ***********************************************************
- * PRINTER SEND A$
- L_PrtSend equ 38
- L38 Dlea PrinterIO,a2
- Rjsr L_Dev.GetIO
- move.l (a3)+,a0
- moveq #0,d0
- move.w (a0)+,d0
- Rbeq L_IFonc
- move.l d0,IO_LENGTH(a1)
- move.l a0,IO_DATA(a1)
- moveq #CMD_WRITE,d0
- Rjmp L_Dev.SendIO
-
- ***********************************************************
- * PRINTER SENDRAW ad,lenght
- L_PrtRaw equ 39
- L39 Dlea PrinterIO,a2
- Rjsr L_Dev.GetIO
- move.l (a3)+,d0
- Rbeq L_IFonc
- move.l (a3)+,a0
- move.l d0,IO_LENGTH(a1)
- move.l a0,IO_DATA(a1)
- moveq #PRD_RAWWRITE,d0
- Rjmp L_Dev.SendIO
-
- *********************************************************************
- * PRINTER ABORT
- L_PrtAbort equ 40
- L40 Dlea PrinterIO,a2
- Rjmp L_Dev.AbortIO
-
- *********************************************************************
- * =PRINTER ONLINE
- L_PrtOnLine equ 41
- L41 Dlea PrinterIO,a2
- Rjsr L_Dev.GetIO
- Dlea Prt_Query,a0
- move.l a0,IO_DATA(a1)
- moveq #PRD_QUERY,d0
- Rjsr L_Dev.DoIO
- Dlea Prt_Query,a0
- moveq #0,d3
- move.l (a2),a1
- cmp.l #1,IO_ACTUAL(a1)
- bne.s .Skip
- btst #0,(a0)
- bne.s .Skip
- moveq #-1,d3
- .Skip moveq #0,d2
- rts
-
- *********************************************************************
- * PRINTER DUMP
-
- ; No parameters
- ; ~~~~~~~~~~~~~
- L_PrtDump1 equ 42
- L42 Dload a2
- Rbsr L_GetScr
- move.w width-DT(a2),pwidth-DT(a2)
- move.w height-DT(a2),pheight-DT(a2)
- move.l #0,destCols-DT(a2)
- move.l #0,destRows-DT(a2)
- move.w #$8c,special-DT(a2) ; ASPECT | FULLROWS | FULLCOLS
- Rbra L_Dump
-
- ; Four parameters
- ; ~~~~~~~~~~~~~~~
- L_PrtDump2 equ 43
- L43 Dload a2
- Rbsr L_Dump2a
-
- ; Calculate proportional DestX, DestY
- clr.l d0
- clr.l d1
- move.w pwidth-DT(a2),d0
- tst.w d0
- Rbeq L_IFonc
- move.w width-DT(a2),d1
- divu.w d0,d1
- tst.w d1
- Rbeq L_IFonc
- lea destCols-DT(a2),a0
- move.l #$ffff,d0
- divu.w d1,d0
- move.l d0,(a0)
- andi.l #$ffff,(a0)
- move.l #$10,d1
- move.l (a0),d0
- rol.l d1,d0
- move.l d0,(a0)
-
- clr.l d0
- clr.l d1
- move.w pheight-DT(a2),d0
- tst.w d0
- Rbeq L_IFonc
- move.w height-DT(a2),d1
- divu.w d0,d1
- tst.w d1
- Rbeq L_IFonc
- lea destRows-DT(a2),a0
- move.l #$ffff,d0
- divu.w d1,d0
- move.l d0,(a0)
- andi.l #$ffff,(a0)
- move.l #$10,d1
- move.l (a0),d0
- rol.l d1,d0
- move.l d0,(a0)
- lea special-DT(a2),a0
- move.w #$b0,(a0)
- Rbra L_Dump
-
- ; Tous les parametres
- ; ~~~~~~~~~~~~~~~~~~~
- L_PrtDump3 equ 44
- L44 movem.l a4-a6,-(sp)
- Dload a2
- Rbsr L_Dump3a
- Rbra L_Dump
-
- ; DUMP Routines...
- ; ~~~~~~~~~~~~~~~~
- L_Dump3a equ 45
- L45 lea special-DT(a2),a0
- lea 2(a3),a3
- move.w (a3)+,(a0) ; special
- lea destRows-DT(a2),a0
- move.l (a3)+,(a0) ; destY
- lea destCols-DT(a2),a0
- move.l (a3)+,(a0) ; destY
- Rbra L_Dump2a
- L_Dump2a equ 46
- L46 lea pheight-DT(a2),a0
- lea 2(a3),a3
- move.w (a3)+,(a0) ; bottom y
- lea pwidth-DT(a2),a0
- lea 2(a3),a3
- move.w (a3)+,(a0) ; bottom x
- lea srcY-DT(a2),a0
- lea 2(a3),a3
- move.w (a3)+,(a0) ; srcy
- lea srcX-DT(a2),a0
- lea 2(a3),a3
- move.w (a3)+,(a0) ; srcx
- Rbsr L_GetScr
- ; get srcX,Y back
- move.w srcX-DT(a2),d0
- move.w srcY-DT(a2),d1
- ; calculate width, height
- neg.w d0
- neg.w d1
- lea pwidth-DT(a2),a0
- add.w d0,(a0) ; width = -srcX+bottomX
- lea pheight-DT(a2),a0
- add.w d1,(a0) ; height = -srcY+bottomY
- rts
- ; Do the screen dump
- ; ~~~~~~~~~~~~~~~~~~
- L_Dump equ 47
- L47
- ; Initialise colour map
- moveq #32,d0
- move.l a6,-(sp)
- move.l T_GfxBase(a5),a6
- jsr -570(a6)
- move.l (sp)+,a6
- tst.l d0
- beq cl5
- move.l d0,colourmap-DT(a2)
- move.l d0,a0
- moveq #0,d0
- move.l ScreenBase-DT(a2),a1
- lea EcPal(a1),a1
- .loop move.w (a1)+,d1
- move.w d1,d3
- and.w #$f,d3
- lsr.w #4,d1
- move.w d1,d2
- and.w #$f,d2
- lsr.w #4,d1
- movem.l d0/a0-a1/a6,-(sp)
- move.l T_GfxBase(a5),a6
- jsr -$276(a6)
- movem.l (sp)+,d0/a0-a1/a6
- addq.w #1,d0
- cmp.w #32,d0
- bne.s .loop
-
- ; Dump the rast port!!!
- move.l PrinterIO-DT(a2),a1
- move.w #11,28(a1) ; command
- move.l T_RastPort(a5),32(a1) ; rastPort
- move.l colourmap-DT(a2),36(a1) ; colourmap
- move.w viewModes-DT(a2),40+2(a1) ; viewmodes
- move.w srcX-DT(a2),44(a1) ; srcX
- move.w srcY-DT(a2),46(a1) ; srcY
- move.w pwidth-DT(a2),48(a1) ; srcWidth
- move.w pheight-DT(a2),50(a1) ; srcHeight
- move.l destCols-DT(a2),52(a1) ; destCols
- move.l destRows-DT(a2),56(a1) ; destRows
- move.w special-DT(a2),60(a1) ; special
- move.l a6,-(sp)
- move.l $4.w,a6
- jsr _LVOSendIO(a6) ; Do it!!!! (at last)
- move.l (sp)+,a6
- move.w d0,-(sp)
-
- ; Free colour map
- cl8 move.l colourmap-DT(a2),a0
- move.l a6,-(sp)
- move.l T_GfxBase(a5),a6
- jsr -576(a6) ; Free colourmap
- move.l (sp)+,a6
- cl5
- ; Return to the user
- move.w (sp)+,d0
- bne.s .Err
- rts
- ; Error
- .Err Rjmp L_Dev.Error
-
- ; Return informations about the current screen
- ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- L_GetScr equ 48
- L48 move.l ScOnAd(a5),d0
- beq.s .Err ; get the address of the screen
- move.l d0,a0
- move.l a0,ScreenBase-DT(a2)
- ; Now we need to extract all the information about the screen
- move.w EcTx(a0),width-DT(a2) ; width
- move.w EcTy(a0),height-DT(a2) ; height
- move.w EcCon0(a0),d0
- and.w #%1000100010000100,d0 ; Hires / HAM / DualPF / Halfbrite
- move.w d0,viewModes-DT(a2) ; View Modes
- move.w EcNPlan(a0),depth-DT(a2) ; depth
- rts
- .Err moveq #47,d0 ; Screen not opened
- Rjmp L_Error
-
- L49
- L50
- L51
- L52
- **********************************************************
- * =PARALLEL BASE
- L_ParBase equ 53
- L53 Dlea ParallelIO,a2
- Rjsr L_Dev.GetIO
- move.l a1,d3
- moveq #0,d2
- rts
-
- **********************************************************
- * =PARALLEL CHECK
- L_ParCheck equ 54
- L54 Dlea ParallelIO,a2
- Rjsr L_Dev.CheckIO
- move.l d0,d3
- beq.s ParChk1
- moveq #-1,d3
- ParChk1 moveq #0,d2
- rts
-
- *********************************************************************
- * PARALLEL OPEN
- L_ParOpen equ 55
- L55 Dlea ParName,a0
- Dlea ParallelIO,a2
- moveq #62,d0
- moveq #0,d1
- moveq #0,d2
- move.w #171,d3 Premier message erreurs
- moveq #7,d4 7 messages
- moveq #0,d5
- Rjmp L_Dev.Open
-
- *********************************************************************
- * PARALLEL CLOSE
- L_ParClose equ 56
- L56 Dlea ParallelIO,a2
- Rjmp L_Dev.Close
-
- *********************************************************************
- L57
-
- ***********************************************************
- * PARALLEL SEND A$
- L_ParSend equ 58
- L58 Dlea ParallelIO,a2
- Rjsr L_Dev.GetIO
- move.l (a3)+,a0
- moveq #0,d0
- move.w (a0)+,d0
- Rbeq L_IFonc
- move.l d0,IO_LENGTH(a1)
- move.l a0,IO_DATA(a1)
- moveq #CMD_WRITE,d0
- Rjmp L_Dev.DoIO
-
- ***********************************************************
- * PARALLEL SENDRAW ad,lenght
- L_ParRaw equ 59
- L59 Dlea ParallelIO,a2
- Rjsr L_Dev.GetIO
- move.l (a3)+,d0
- Rbeq L_IFonc
- move.l (a3)+,a0
- move.l d0,IO_LENGTH(a1)
- move.l a0,IO_DATA(a1)
- moveq #PRD_RAWWRITE,d0
- Rjmp L_Dev.DoIO
-
- *********************************************************************
- * PARALLEL ABORT
- L_ParAbort equ 60
- L60 Dlea ParallelIO,a2
- Rjmp L_Dev.AbortIO
-
- *********************************************************************
- * =PARALLEL STATUS
- L_ParStatus equ 61
- L61 Dlea ParallelIO,a2
- Rjsr L_Dev.GetIO
- moveq #PDCMD_QUERY,d0
- Rjsr L_Dev.DoIO
- moveq #0,d3
- move.l (a2),a1
- move.b $34(a1),d3
- moveq #0,d2
- rts
-
- *********************************************************************
- * =PARALLEL ERROR
- L_ParError equ 62
- L62 Dlea ParallelIO,a2
- Rjsr L_Dev.GetIO
- moveq #0,d3
- move.l (a2),a1
- move.b IO_ERROR(a1),d3
- moveq #0,d2
- rts
-
- *********************************************************************
- * =PARALLEL INPUT$(long[,stop])
- L_ParInput1 equ 63
- L63 Dlea ParallelIO,a2
- Rjsr L_Dev.GetIO
- bclr #PARB_EOFMODE,IO_PARFLAGS(a1)
- Rbra L_ParInput
- L_ParInput2 equ 64
- L64 Dlea ParallelIO,a2
- Rjsr L_Dev.GetIO
- move.l (a3)+,d3
- bset #PARB_EOFMODE,IO_PARFLAGS(a1)
- beq.s .Set
- cmp.b IO_PTERMARRAY(a1),d3
- beq.s .Skip
- .Set moveq #7,d0
- lea IO_PTERMARRAY(a1),a0
- .Loop move.b d3,(a0)+
- dbra d0,.Loop
- moveq #PDCMD_SETPARAMS,d0
- Rjsr L_Dev.DoIO
- .Skip Rbra L_ParInput
- ; Appel
- L_ParInput equ 65
- L65 move.l (a3)+,d4
- Rble L_IFonc
- cmp.l #65000,d4
- Rbcc L_IFonc
- * Ask for string space...
- movem.l a1/a2,-(sp)
- move.l d4,d3
- and.l #$FFFE,d3
- addq.w #2,d3
- Rjsr L_Demande
- lea 2(a1,d3.w),a1
- move.l a1,HiChaine(a5)
- movem.l (sp)+,a1/a2
- * Send to device...
- move.l a0,d3
- move.w d4,(a0)+
- move.l a0,IO_DATA(a1)
- move.l d4,IO_LENGTH(a1)
- moveq #CMD_READ,d0
- Rjsr L_Dev.DoIO
- moveq #2,d2
- rts
-
- L66
- L67
- L68
- L69
-
- **********************************************************************
- * SPACE FOR ERROR ROUTINES...
- L70
- L71
- L72
- *********************************************************************
-
- ******* TITLE MESSAGE
- C_Title dc.b "AMOSPro IO Devices Extension V "
- Version
- dc.b 0,"$VER: "
- Version
- dc.b 0
- Even
-
- ******* END OF THE EXTENSION
- C_End dc.w 0
- even
-